﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp7
{
    class Program
    {
        //第一题：
        //一个考试管理系统，需要录入考生成绩，只能录入数字，否则会报类型转换异常。
        //请编写相关代码，
        //1、捕获FormatException异常，并打印输出“异常已处理；
        //2、捕获OverflowException异常，数值超出double范围的异常，并打印输出“异常已处理；
        //3、捕获一般异常Exception异常。
        //4、最终处理finally
        //录入成绩结束后，请输出，总学生数，总分数，平均分。
        static void Main(string[] args)
        {
            main1();
        }
        static void main()
        {

            try
            {
                int num = 0;
                int avg = 0;
                int stunum = 0; 
                while (true)
                {
                    Console.WriteLine("请输入分数,退出请按99");
                    int a = int.Parse(Console.ReadLine());
                    if (a==99)
                    {
                        break;
                    }
                    else
                    {
                        num = num + a;
                        stunum = stunum + 1;
                        avg = num / stunum;
                    }
                }
                Console.WriteLine("总学生数{0}，总分数{1}，平均分{2}",stunum,num,avg);
            }
            catch (FormatException f)
            {
                Console.WriteLine("异常已处理");
                throw;
            }
            catch (OverflowException o)
            {
                Console.WriteLine("异常已处理2");

            }
            catch (Exception e)
            {
                Console.WriteLine("异常已处理3");

            }
            finally
            {
                Console.WriteLine("已完成");
            }
        }
        static void main1()
        {
            //            第二题：

            //编写一个程序，用以接收用户输入的两个浮点型的数值，一个值表示用户想要存放在银行账户中的余额，另一个值表示用户想要从银行账户中提取的金额。
            //实现存取款功能，
            //用户功能选择：1、存款，2、取款
            //取款时：
            //当用户想要提取的金额大于余额时，请手动抛出一个ArgumentOutOfRangeException 参数超出范围的异常，异常信息可以写“取款金额大于余额，请重新输入”
            //，如此以确保取款金额始终不大于当前余额。
            //操作结束，打印输出余额是多少。
            //最后再添加catch一般异常 Exception，使得数据类型转换的异常也能被捕获到。
            int a = 100;
        end:

            try
            {
                Console.WriteLine("1、存款，2、取款 ,3、退出");
                int key = int.Parse(Console.ReadLine());
                switch (key)
                {
                    case 1:
                        Console.WriteLine("请输入你要存入的金额");
                        int b = int.Parse(Console.ReadLine());
                        a = a + b;
                        Console.WriteLine("你现在的余额是：" + a);
                        goto end;
                        break;
                    case 2:
                        Console.WriteLine("请输入你要取出的金额");
                        int c = int.Parse(Console.ReadLine());
                        if (c > a)
                        {
                            throw new ArgumentOutOfRangeException("取款金额大于余额，请重新输入");
                        }
                        else
                        {
                            a = a - c;
                            Console.WriteLine("你现在的余额还有：" + a);
                        }
                        goto end;

                        break;
                    case 3:

                        break;

                    default:
                        break;
                }
            }
            catch (Exception e)
            {

                Console.WriteLine("取款金额大于余额");
            }
            finally 
            {
                Console.WriteLine("傻逼，钱没了啊！！！！");
            }

        }
    }
}
